package io;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 通过提高每次读写的数据量减少实际读写的次数可以提高读写效率
 * 一次写一个字节的形式是一种随机读写形式
 * 而一次读写一组字节的形式是快读写形式
 */
public class CopyDemo2 {
    public static void main(String[] args) throws IOException {
        FileInputStream  fis = new FileInputStream("./五黑.png");
        FileOutputStream fos = new FileOutputStream("./五黑1.png");
        /*
            块读：
            int read(byte[] data)
            一次性读取给定得字节数组总长度得字节量并存入到该数组中，
            返回值为实际读取到的字节量，若发挥至为-1则表示读取到了末尾

            void write(byte[] data)
            一次性将给定的字节数组中所有字节写出

            void write(byte[] data,int offset,int len)
            将给定的字节数组从下标offset处开始的连续len个字节一次性写出

            原文件数据：
            10001100 10001100 10001100 10001100 文件末尾
            ^^^^^^^^ ^^^^^^^^ ^^^^^^^^
         */
        byte[] bytes = new byte[1024*10];
        long start = System.currentTimeMillis();
        int len;
        while((len = fis.read(bytes))!=-1){
            fos.write(bytes,0,len);
        }

        long end = System.currentTimeMillis();
        System.out.println("复制完成,耗时："+(end-start)+"ms");
        fis.close();
        fos.close();
    }
}
